#ifndef GameObject_h__
#define GameObject_h__
#pragma once

#include <glm.hpp>
#include <gtc/quaternion.hpp>

namespace le
{
	/** Absolute base class of all game objects like i.e. Visual, Camera..*/
	class GameObject
	{
	public:
		GameObject();
		virtual ~GameObject();

		void SetPosition(const glm::vec3& position ) { m_Position = position; }
		glm::vec3 GetPosition() const {return m_Position;}

		void SetRotation(float xRotation, float yRotation, float zRotation);
		void SetRotation(const glm::quat& rotation) { m_Rotation = rotation; }
		glm::quat GetRotation() const {return m_Rotation;}

		void SetScale(float scale);
		void SetScale(float x, float y, float z);
		void SetScale(const glm::vec3& scale) { m_Scale = scale; }
		glm::vec3 GetScale() const { return m_Scale; }

		glm::mat4x4 GetWorldMatrix() const;

	private:
		glm::vec3 m_Position;
		glm::quat m_Rotation;
		glm::vec3 m_Scale;
	};
}

#endif // GameObject_h__